מה לא נכון פה ?
function secure($name){
$post = strip_tags(htmlspecialchars($_POST[$name]));
return $post;
}
שגיאה : ( ! ) Notice: Undefined index: author in C:\wamp\www\xxxxx\config.php on line 10
Call Stack
# Time Memory Function Location
1 0.0008 375176 {main}( ) ..\xxx_Xxxx.php:0
2 0.0143 383616 secure( ) ..\xxx_Xxxx.php:87
8 תשובות
אין במערך POST_ אלמנט עם מפתח author.
תבדוק שקיים אלמנט עם מפתח כזה באמצעות isset לפני שאתה מנסה לגשת אליו.
באופן כללי, שתכיר:
מישהו פעם כתב את הפונקציה הזו secure .. חצי מ"מפתחי ה PHP" העתיקו אותה
והבעיה איתה - שהיא לא עושה שום דבר מועיל, אם לא פוגעת במערכת..
למה?
כי צריך לעשות ככה וגם ככה כדי להגן על האתר ולא את מה שהפונקציה הזאת עושה.
יש לי
זה אומר שקיים נכון ?
לא הבנתי בדיוק מה לעשות עם ISSET
לא, זה לא אומר שקיים.
תדפיס את המערך באמצעות הפקודה print_r ותדע מה קיים.
http://php.net/FUNCTION_NAME
http://php.net/isset
http://php.net/print_r
לא מצליח לי, תוכל להגיד לי מה לכתוב בשביל שזה יעבוד ?!
תראה דוגמא אולי תבין.
בכל מקרה הפונקציה הנ"ל מציקה, לא יעילה ולא מאבטחת שום דבר.
למנוע הזרקת שאילתות - escape_string למינהם (mysql_real_escape_string בMySQL).
למנוע XSS - תעבוד עם htmlentities
$author = secure($_POST['name']);
function secure($name){
$post = strip_tags(htmlspecialchars($name));
return $post;
}
?>
אני זוכר שראיתי את הפונקציה הזאת באחד מהמדריכים ל-php ביוטיוב, וקיוויתי שלא ישתמשו בה.
מאז אני רק רואה יותר ויותר משתמשים בפונקציה secure, שהיא פשוט facepalm אחד גדול.
ניסים, תלמד מה htmlspecialchars עושה ומה strip_tags עושה ותבין שה-strip_tags בפונקציה הזו לא עושה כלום ורק מבזבזת משאבים.
תלמד מתי משתמשים ב-htmlspecialchars (רמז: xss), ומה עושים כדי לסנן נתונים שעומדים להכנס למסד (רמז: real_escape_string) כדי למנוע חורי אבטחה (רמז: sql injection).
בנוגע לבעיה שלך, תדפיס את המערך POST_ כדי לוודא שאכן מגיע המפתח author: